/**
  ******************************************************************************
  * @file    YLO_AIP16C23.h
  * @brief   AIP16C23 LCD驱动芯片头文件
  * @author  YourName
  * @version V1.0.0
  * @date    2023-xx-xx
  * @note    AIP16C23是一款I2C接口的LCD驱动器，支持最大35段显示
  ******************************************************************************
  */

#ifndef _YLO_AIP16C23_H
#define _YLO_AIP16C23_H

#ifdef __cplusplus
extern "C" {
#endif

/* 包含头文件 ----------------------------------------------------------------*/
#include <stdint.h>
#include "sc32f1xxx.h"
#include "sc32f1xxx_gpio.h"
#include "sc32f1xxx_rcc.h"

/* 宏定义 --------------------------------------------------------------------*/

/**
  * @brief GPIO引脚定义
  * @note 请根据实际硬件连接修改这些定义
  */
#define CLK_PORT    GPIOB   /**< CLK时钟信号GPIO端口 */
#define CLK_PIN     GPIO_Pin_11  /**< CLK时钟信号引脚 */
#define SDA_PORT    GPIOB   /**< SDA数据信号GPIO端口 */  
#define SDA_PIN     GPIO_Pin_12  /**< SDA数据信号引脚 */

/**
  * @brief GPIO操作宏定义
  * @note 用于快速操作CLK和SDA引脚电平
  */
#define CLK_HIGH()  GPIO_SetBits(CLK_PORT, CLK_PIN)    /**< CLK引脚置高电平 */
#define CLK_LOW()   GPIO_ResetBits(CLK_PORT, CLK_PIN)  /**< CLK引脚置低电平 */
#define SDA_HIGH()  GPIO_SetBits(SDA_PORT, SDA_PIN)    /**< SDA引脚置高电平 */
#define SDA_LOW()   GPIO_ResetBits(SDA_PORT, SDA_PIN)  /**< SDA引脚置低电平 */
#define SDA_READ()  GPIO_ReadDataBit(SDA_PORT, SDA_PIN) /**< 读取SDA引脚状态 */

/**
  * @brief AIP16C23显示段数定义
  * @note 该芯片支持最大35段显示
  */
#define AIP16C23SEGNUM 35  /**< AIP16C23显示段数量 */

/* 全局变量声明 --------------------------------------------------------------*/
extern uint8_t Aip16c23DspData[AIP16C23SEGNUM];  /**< 显示数据缓冲区 */

/* 函数声明 ------------------------------------------------------------------*/

/**
  * @brief 延时函数组
  */
void delay(void);                    /**< 微秒级延时函数 */
void delay_ms(uint16_t ms);          /**< 毫秒级延时函数 */

/**
  * @brief GPIO配置函数
  */
void Aip16C23Gpio_Init(void);        /**< AIP16C23 GPIO引脚初始化 */

/**
  * @brief I2C通信函数组
  */
void AiP16C23_I2c_Start(void);       /**< I2C起始信号生成 */
void AiP16C23_I2c_Stop(void);        /**< I2C停止信号生成 */
uint8_t AiP16C23_I2c_Ack(void);      /**< 检查I2C应答信号 */
void AiP16C23_Write_Byte(uint8_t dat); /**< 向AIP16C23写入一个字节 */
uint8_t AiP16C23_Read_Byte(void);    /**< 从AIP16C23读取一个字节 */

/**
  * @brief AIP16C23控制函数组
  */
void AiP16C23_Write_Cmd(uint8_t addr, uint8_t cmd);  /**< 向指定地址写入命令 */
void AiP16C23_Read_EEP(uint8_t addr);                /**< 从EEPROM读取数据 */
void AiP16C23_ClearScreen(void);                     /**< 清除LCD屏幕显示 */
void AiP16C23_init(void);                            /**< AIP16C23芯片初始化 */
void AiP16C23_Driver(void);                          /**< 显示驱动更新函数 */

#ifdef __cplusplus
}
#endif

#endif /* _YLO_AIP16C23_H */

/**
  * @}
  */

/**
  * @}
  */
  